package prvydevj;

import java.util.Date;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * Třída reprezentující transakci na účtě.
 * User: marpies
 * Date: 5/3/13
 * Time: 11:00
 * PM To change this template use File | Settings | File Templates.
 */
public class Transaction {

    private Date vystaveni;
    private Date splatnost;
    private String ucet;
    private List<InvoiceItem> items = new ArrayList<>();
    private Integer id;
    private String nazev;
    private String mesto;
    private String ulice;
    private String psc;
    private String ico;
    private String dic;
    private Boolean prijem;

    /**
     * Vytvoří objekt transakce zadáním jeho id, datumu vystavení a splatnosti, účtu protistrany
     * a zda se jedná o příjem či výdaj.
     * @param id id transakce
     * @param vystaveni datum vystavení
     * @param splatnost datum splatnosti
     * @param ucet účet protistrany
     * @param prijem příjem (true) či výdaj (false)
     */
    public Transaction(Integer id, Date vystaveni, Date splatnost, String ucet, Boolean prijem) {
        this.vystaveni = vystaveni;
        this.splatnost = splatnost;
        this.ucet = ucet;
        this.id = id;
        this.prijem = prijem;
    }

    /**
     * Získání id transakce
     * @return id transakce
     */
    public Integer getId() {
        return this.id;
    }

    /**
     * Nastaveni id transakce
     * @param id transakce
     */
    public void setId(int id)
    {
        this.id = id;
    }

    /**
     * Získání hodnoty, zda se jedná o příjem či výdaj
     * @return true (příjem), false (výdaj)
     */
    public Boolean getPrijem() {
        return this.prijem;
    }

    /**
     * Získání data vystavení
     * @return datum vystavení
     */
    public Date getVystaveni() {
        return vystaveni;
    }

    /**
     * Získání data splatnosti
     * @return datum splatnosti
     */
    public Date getSplatnost() {
        return splatnost;
    }

    /**
     * Získání účtu protistrany
     * @return účet protistrany
     */
    public String getUcet() {
        return ucet;
    }

    /**
     * Nastavení účtu protistrany
     * @param ucet účet protistrany
     */
    public void setUcet(String ucet) {
        this.ucet = ucet;
    }

    /**
     * Získání všech položek, které jsou předmětem transakce
     * @return kolekce položek
     */
    public List<InvoiceItem> getItems() {
        return items;
    }

    /**
     * Přidání položky
     * @param item objekt položky
     */
    public void addItem(InvoiceItem item)
    {
        items.add(item);
    }

    /**
     * Získání celkové částky.
     * @return celková částka
     */
    public BigDecimal getCastka() {
        BigDecimal sum = BigDecimal.ZERO;

        for (InvoiceItem item : items) {
            sum = sum.add(item.getCena().multiply(BigDecimal.valueOf(item.getKs())));
        }
        return sum;
    }

    /**
     * Nastavení orgranizace protistrany zadáním jejího jména, ičo, dič, města, ulice a PSČ
     * @param nazev název organizace
     * @param ico ičo
     * @param dic dič
     * @param mesto město
     * @param ulice ulice
     * @param psc PSČ
     */
    public void setOrganisation(String nazev, String ico, String dic, String mesto, String ulice, String psc) {
        this.ico = ico;
        this.dic = dic;
        this.nazev = nazev;
        this.mesto = mesto;
        this.ulice = ulice;
        this.psc = psc;
    }

    /**
     * Získání města protistrany
     * @return město protistrany
     */
    public String getMesto() {
        return this.mesto;
    }

    /**
     * Získání ulice protistrany
     * @return ulice protistrany
     */
    public String getUlice() {
        return this.ulice;
    }

    /**
     * Získání PSČ protistrany
     * @return PSČ protistrany
     */
    public String getPsc() {
        return this.psc;
    }

    /**
     * Nastavení IČO protistraně
     * @param ico IČO protistrany
     */
    public void setIco(String ico) {
        this.ico = ico;
    }

    /**
     * Získání IČO protistrany
     * @return IČO protistrany
     */
    public String getIco() {
        return this.ico;
    }

    /**
     * Nastavení DIČ protistrany
     * @param dic DIČ protistrany
     */
    public void setDic(String dic) {
        this.dic = dic;
    }

    /**
     * Získání DIČ protistrany
     * @return DIČ protistrany
     */
    public String getDic() {
        return this.dic;
    }

    /**
     * Nastavení názvu transakce
     * @param nazev název transakce
     */
    public void setNazev(String nazev) {
        this.nazev = nazev;
    }

    /**
     * Získání názvu transakce
     * @return název transakce
     */
    public String getNazev() {
        return this.nazev;
    }
    
}
